class Customer < ActiveRecord::Base
  # La classe customer è costruita con l'idea di contenere un account, che si
  # occupa dell'autenticazione, sarebbe stato bello ereditare direttamente da
  # account, ma non sarebbe convieniente perché si avrebbero tutti gli
  # attributi di customer salvati nella stessa tabella di Account, con enorme
  # spreco di spazio e anche problemi di sicurezza!

  # Soluzione: il cliente possiede un account, tramite una relazione polimorfica
  # allo stesso modo di Pizzeria e Fattorino ad esempio!
  has_one :account, :as => :user, :validate => true
  has_many :orders, :dependent => :delete_all
  # Controlliamo che il nome e cognome abbira la prima lettera maiuscola
  validates_presence_of :name, :surname, :phonenumber, :address
  validates_numericality_of :phonenumber, :only_integer => true
  validates_each :name, :surname do |record, attr, value|
    value.downcase!
    value.capitalize!
  end

  validates_each :address do |record, attr, value|
    geocode = Geocoding.get(value)
    if geocode[0]
      record.latitude = geocode[0][:latitude]
      record.longitude = geocode[0][:longitude]
    else
      record.errors.add attr, "Errore nell'indirizzo!"
    end
  end
end
